$(() => {
  if (!checkTruePage({ 
    notMode: 1, 
    strict: 0, 
    pages: [
        'pl/notifications/settings/my',
        'notifications/notifications/all',
        'sales/control/userProduct/my',
        'pl/sales/user-balance-row',
        'pl/sales/promo-code/my-codes',
        '/sales/control/userProduct/update/id/',
        'pl/teach/control/schedule',
        'teach/control/answers/my',
        '/user/control/user/questionary',
        'teach/control/stream',
        '/pl/system/sublogined',
        '/pl/talks/conversation',
        'pl/teach/control/lesson',
        'pl/user/profile',
        'pl/my'
    ] 
})) {
    document.querySelector('body').classList.add('designed');

    // Добавление панели навигации
        let user_avatar = gcAccountUserMenu.items[0].iconUrl;
        let page_main_block = '.main-page-block';
        
        if (!checkTruePage({ notMode: 1, strict: 0, pages: ['pl/teach/control/lesson'] })) {
        	page_main_block = 'body';
        	
        	const container = document.querySelector('.container');
					const pageActions = document.querySelector('.page-actions');
					
					// Проверяем, что оба элемента существуют
					if (container && pageActions) {
					  // Вставляем page-actions в начало container
					  container.insertBefore(pageActions, container.firstChild);
					  pageActions.style.setProperty('position', 'static', 'important');
					}
        }

        if (!checkTruePage({ notMode: 1, strict: 0, pages: ['/pl/talks/conversation','/pl/system/sublogined','/pl/user/profile','pl/my','pl/sales/user-balance-row/','/pl/sales/promo-code/my-codes'] })) {
        	page_main_block = '.gc-main-content';
        }
        
        document.querySelector(page_main_block).insertAdjacentHTML('afterbegin', `
            <div class="platform_navigation">
                <div class="inner_navifation">
                    <div class="nav_profile">
                        <div class="nav_notify">
                            <a href="https://zhukovanatallia.ru/notifications/notifications/all" class="nav_notfy-icon">
                                <span class="nav_notify-count">0</span>
                            </a>
                        </div>
                        <div class="nav_user_info">
                            <div class="nav_avatar">
                                <img src="${user_avatar}">
                            </div>
                            <div class="nav_info">
                                <span class="nav_user-navigation">
                                    <span class="nav_user-name">
                                        ${accountSafeUserName}
                                        <svg class="nav_user-menu-icon" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" fill="none">
                                            <circle cx="7" cy="7" r="7" fill="#D9D9D9"/>
                                            <path d="M4 6L7 9L10 6" stroke="black" stroke-linecap="round"/>
                                        </svg>
                                    </span>
                                    <span class="nav_user-menu">
                                        <ul class="user-menu">
                                            <!--<li class="user-menu-element"><a href='/pl/user/profile/${accountUserId}'>Профиль</a></li>-->
                                            <li class="user-menu-element"><a href='/pl/my'>Профиль</a></li>
                                            <li class="user-menu-element"><a href='/user/my/changePassword'>Сменить пароль</a></li>
                                            <li class="user-menu-element"><a href='/pl/notifications/settings/my'>Уведомления</a></li>
                                            <li class="user-menu-element"><a href='/user/my/logout'>Выход</a></li>
                                        </ul>
                                    </span>
                                </span>
                                <span class="nav_user-mail">-</span>
                            </div>
                        </div>
                    </div>
                    <div class="nav_mobile_btns"></div>
                    <div class="nav_btns">
                        <a href="/teach/control/stream" class="nav_btn">Главная</a>
                        <a href="/sales/control/userProduct/my" class="nav_btn">Мои покупки</a>
                        <a href="/pl/talks/conversation" class="nav_btn">Сообщения</a>
                        <a href="/cms/system/contact" class="nav_btn special_btn">Поддержка</a>
                    </div>
                </div>
            </div>
        `);
        
        setTimeout(function() {
            let notifyElement = document.querySelector('.menu-item-notifications_button_small .notify-count');
            let notify_count = notifyElement ? notifyElement.textContent : '0';
            let navNotifyCount = document.querySelector('.nav_notify-count');
            
            if (parseInt(notify_count) > 0) {
                navNotifyCount.style.display = 'inline';
                navNotifyCount.textContent = notify_count;
            }
        }, 1200);

        
        // Обработчики событий
        document.querySelector('.nav_user-menu-icon')?.addEventListener('click', function() {
            const menu = document.querySelector('.nav_user-menu');
            menu.classList.toggle('active');
        });
        
        document.querySelector('.nav_mobile_btns')?.addEventListener('click', function() {
            const navBtns = document.querySelector('.nav_btns');
            navBtns.classList.toggle('active');
        });
}
        
	$('.logo-link').attr('href', '/teach/control/stream/index');
	$.get("/user/my/profile", function(response) {
	 		
	    // Парсим ответ (учитываем, что это может быть JSON или HTML)
	    const htmlContent = typeof response === 'string' ? 
	                       (response.startsWith('{') ? JSON.parse(response).html : response) : 
	                       response.html;
	    
	    // Создаем временный DOM-элемент для парсинга
	    const tempDiv = document.createElement('div');
	    tempDiv.innerHTML = htmlContent;
	    
	    // Ищем элемент, содержащий текст "E-mail"
	    const emailElement = Array.from(tempDiv.querySelectorAll('*'))
	        .find(el => el.textContent.trim().startsWith('E-mail'));
	    
	    let form_text = $(emailElement).find('input + div > .row:nth-child(1)').text();
	    
	    form_text = form_text.match(/E-mail[^a-zA-Z0-9]*([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9_-]+)/i)[1];
	    
	    $('.nav_user-mail').text(form_text);
	
		})
})

//Функция проверки страницы на которой находится пользователь
function checkTruePage(opt) {
    let i=false; 
    opt.pages.forEach(el => {
        if (opt.strict) {console.log(window.location.href, el);if(window.location.href==el)i=true;}
        else if(window.location.href.indexOf(el)>-1)i=true;
    });
    return opt.notMode ? !i : i ;
}

$(() => {
  	$('.add_icon tr').each((i, tr) => {
		if ($(tr).attr('data-training-image').length > 10) {
			$(tr).find('a').prepend(`<div class="tr_image" style="background-image: url(${$(tr).attr('data-training-image')})"></div>`);
		}
	})
	/* Система избранных уроков */
    const user_id = accountUserId;

    $('.nav_notify').after(`
    <div class="nav_favorite">
    <a class="nav_favorite-icon">
    <span class="nav_notify-count">0</span>
    </a>
    <div class="user_favorite" style="display:none;">

    </div>
    </div>
    `);
    
    count_favorite(user_id);

    $('.nav_favorite-icon').on('click', function() {
        load_menuFavorite(user_id);
    });

    $('*:not(.user_favorite)').on('click', function() {
        $('.user_favorite').attr('style','display: none;');
    })

    $('body').append(`<span id="fav_msg" style="display:none;"><i aria-hidden="true"></i><span class="fav_msg_text"></span></span>`);

    //Значек избранного в уроке
    if ($('.lesson-header-block').length > 0) {

        let lesson_id = new URLSearchParams(new URL(location.href).search).get('id');
        let lesson_title = $('.lesson-title-value').text().replaceAll('"','\'');
        let lesson_module = $('.breadcrumb li:last-child a').text();

        $.get(`/chtm/favorite~check?user_id=${user_id}&lesson_id=${lesson_id}`, function(data) {
            $('.lesson-header-block .header-view .col-md-12').append(`
            <a class="favIcon" onClick="add_toFavorite(${user_id}, ${lesson_id}, '${lesson_title}', '${lesson_module}');">
            ${loadIcon(data)}
            </a>
            `);

            if (data) {
                $('.lesson-header-block .favIcon').addClass('active');
            }
        });
    }

    setTimeout(function() {
        let allCats = $('.book_allCats:not(.setting-editable) .f-text p').length;
        if ((allCats / 2) >= 2 ) {
            $('.book_allCats:not(.setting-editable) .f-text').append('<div class="firstCol"></div><div class="secondCol"></div>');

            $('.firstCol').append($('.book_allCats:not(.setting-editable) .f-text p'));

            let count_books = parseInt(allCats / 2);
            let firstCol = allCats - count_books;

            for (var i = 0; i < count_books; i++) {
                $('.secondCol').append($('.firstCol p:nth-child('+(firstCol + 1)+')'));
            }
        }
    }, 1000);
})


//Функция показа сообщения добавления/исключения из избранного
function showAndHideFavMsg() {
    const $favMsg = $('#fav_msg');

    if ($favMsg.length) {
        $favMsg.css({ opacity: 0, display: 'inline-block' })
        .animate({ opacity: 1 }, 1000);
        setTimeout(function() {
            $favMsg.animate({ opacity: 0 }, 1000, function() {
                $favMsg.css('display', 'none');
            });
        }, 3000);
    }
}

//Функция добавления/исключения урока из избранного
function add_toFavorite(user_id, lesson_id, lesson_title, lesson_module, load_type) {
    $.get(`/chtm/favorite~add?user_id=${user_id}&lesson_id=${lesson_id}&lesson_title=${lesson_title}&lesson_module=${lesson_module}`, function(data) {

        if (data != 'overlimit') {
            if (load_type != 'list') {
                $('.favIcon').html(loadIcon(data));
            } else {
                $('.lesson-list li[data-lesson-id="'+lesson_id+'"] .favIcon').html(loadIcon(data));
            }

            switch (data) {
                case true:
                  $('#fav_msg').attr('class','plus');
	                $('#fav_msg i').attr('class', 'fa fa-plus-circle');
	                $('.fav_msg_text').text('Урок добавлен в избранное');
	                $('.lesson-header-block .favIcon, .lesson-list li[data-lesson-id="'+lesson_id+'"] .favIcon').addClass('active');
                break;

                case false: 
                    $('#fav_msg').attr('class','minus');
                $('#fav_msg i').attr('class', 'fa fa-minus-circle');

                $('.fav_msg_text').text('Урок убран из избранного');
                $('.lesson-header-block .favIcon, .lesson-list li[data-lesson-id="'+lesson_id+'"] .favIcon').removeClass('active');
                break;
                default:
                    // code
            }

            count_favorite(user_id);


        } else {
            $('#fav_msg').attr('class','overlimit');
            $('#fav_msg i').attr('class', 'fa fa-stop-circle');

            $('.fav_msg_text').text('Превышен лимит записей в избранном');
        }

        showAndHideFavMsg();

    });
}

//Функция загрузки содержимого подменю в боковой панели
function load_menuFavorite(user_id) {

    $.get(`/chtm/favorite~load?user_id=${user_id}`, function(data) {
        let all_fav = '';
        if (data.length > 0) {
            data.forEach((item) => {

                all_fav += `
                <li class="menu-item-${item['lesson_id']}">
                <a class="subitem-link" target="_self" href="/pl/teach/control/lesson/view?id=${item['lesson_id']}">
                <span class="favTitle">${item['lesson_title']}</span>
                <span class="favModule">${item['lesson_module']}</span>
                </a>
                </li>
                `;
            });
        } else {
            all_fav = '<li class="fav_empty">У вас нет избранных уроков</li>';
        }

        $('.user_favorite').html(`
        <ul>
        ${all_fav}
        </ul>
        `);

        $('.user_favorite').attr('style','display: block;');
    });
}

//Функция добавления значка избранного в список уроков
function load_listFavorite(user_id) {
    $.get(`/chtm/favorite~load?user_id=${user_id}`, function(data) {
        allFavorite = data;

        $('.lesson-list li').each((i, lesson) => {
            let findFav = false;
            let curLessonID = $(lesson).attr('data-lesson-id');

            if ($(lesson).hasClass('lesson-is-hidden')) return;

            allFavorite.forEach(item => {
                let favLessonID = item['lesson_id'];

                if (curLessonID == favLessonID) {
                    findFav = true;
                }
            });

            let lsTitle = $(lesson).find('.title').html().split('<')[0].replaceAll('"','\\\'').replace(/[\n\t]+/g, '');


            $(lesson).find('a').append(`
            <a class="favIcon" onClick="add_toFavorite(${user_id}, ${$(lesson).attr('data-lesson-id')}, '${lsTitle}', '${$('h1').text()}','list');">
            ${loadIcon(findFav)}
            </a>
            `);

            if (findFav) {
                $(lesson).find('.favIcon').addClass('active');
            }

            $(lesson).find('a.favIcon').on('click', function() {
                event.preventDefault()
            });
        });
    });
}

//Функция подсчета избранных уроков
function count_favorite(user_id) {
    $.get(`/chtm/favorite~load?user_id=${user_id}`, function(data) {
        allFavorite = data;
        if (allFavorite.length > 0)
        $('.nav_favorite-icon .nav_notify-count').text(allFavorite.length).show();
        else
        $('.nav_favorite-icon .nav_notify-count').hide();
    })
}

//Фунция стилизации иконки избранного
function loadIcon(val) {
  let strokeColor = '#D8A566';
  let fillColor = '#D8A566';

  if (val) {
      fillColor = '#D8A566';
      strokeColor = '#D8A566';
  } else {
      fillColor = 'none';
      strokeColor = '#fff';
  }

  return `
  <svg xmlns="http://www.w3.org/2000/svg" width="21" height="24" viewBox="0 0 21 24" fill="none">
	  <path d="M17.669 1.39406C19.0141 1.55017 19.9993 2.70989 19.9993 4.06409V23L10.8327 18.4167L1.66602 23V4.0641C1.66602 2.70989 2.65123 1.55017 3.9964 1.39406C6.23903 1.13379 8.52023 1 10.8327 1C13.1451 1 15.4263 1.13379 17.669 1.39406Z" fill="${fillColor}" stroke="${strokeColor}" stroke-width="1.83333" stroke-linecap="round" stroke-linejoin="round"/>
	</svg>

  `;
}

document.addEventListener('DOMContentLoaded', function() {
    // Получаем элементы с проверкой на их существование
    const searchInput = document.getElementById('lesson-search-input');
    const searchButton = document.getElementById('lesson-search-button');
    const searchResultsContainer = document.getElementById('lesson-search-results-container');

    // Проверяем, существуют ли необходимые элементы
    if (!searchInput || !searchResultsContainer) {
        return;
    }

    // Создаём элементы для статуса и результатов внутри контейнера
    const searchStatus = document.createElement('div');
    searchStatus.className = 'search-status';
    searchResultsContainer.appendChild(searchStatus);

    const searchResults = document.createElement('div');
    searchResults.id = 'lesson-search-results';
    searchResultsContainer.appendChild(searchResults);

    // Изначально скрываем контейнер
    searchResultsContainer.style.display = 'none';

    // Добавляем кнопку очистки поиска
    const clearButton = document.createElement('span');
    clearButton.className = 'clear-search';
    clearButton.innerHTML = '×';
    clearButton.title = 'Очистить поиск';
    searchInput.parentNode.insertBefore(clearButton, searchInput.nextSibling);

    // Переменные для управления асинхронным поиском
    let allTrainings = [];
    let lessonCache = new Map(); // Кэш для уроков по URL тренинга
    let searchTimeout;
    let isSearching = false;
    const DEBOUNCE_DELAY = 300; // Задержка в миллисекундах

    // Функция для сбора данных о тренингах на странице
    function collectTrainingData() {
        searchStatus.innerHTML = '<span class="search-loader"></span> Загрузка тренингов...';

        return new Promise((resolve) => {
            setTimeout(() => {
                const trainingElements = document.querySelectorAll('.stream-table .training-row');
                allTrainings = [];

                trainingElements.forEach(element => {
                    const title = element.querySelector('.stream-title')?.textContent?.trim() || '';
                    const url = element.querySelector('a')?.href || '';
                    const lessonCount = element.querySelector('b')?.textContent?.match(/\d+/)?.[0] || '0';

                    allTrainings.push({
                        element: element,
                        title: title,
                        url: url,
                        lessonCount: parseInt(lessonCount, 10)
                    });
                });

                searchStatus.textContent = `Найдено ${allTrainings.length} тренингов`;
                resolve(allTrainings);
            }, 100);
        });
    }

    // Функция для извлечения уроков из текущей страницы
    function collectLocalLessons() {
        const lessons = [];
        const lessonElements = document.querySelectorAll('.lesson-list li');

        lessonElements.forEach(element => {
            const titleElement = element.querySelector('.link.title');
            let title = titleElement?.textContent?.trim() || '';
            // Удаляем текст "просмотрено" и содержимое тега <span>
            title = title.replace(/просмотрено/i, '').trim();
            const span = titleElement?.querySelector('.lesson-list__video-watched');
            if (span) {
                title = titleElement.cloneNode(true);
                title.removeChild(title.querySelector('.lesson-list__video-watched'));
                title = title.textContent.trim();
            }
            const description = element.querySelector('.description')?.textContent?.trim() || '';
            const url = element.querySelector('a.item-a')?.href || '';

            lessons.push({
                trainingTitle: 'Текущая страница',
                title: title,
                description: description,
                url: url,
                text: (title + ' ' + description).toLowerCase()
            });
        });

        return lessons;
    }

    // Функция для загрузки уроков тренинга по URL
    function fetchLessons(trainingUrl, trainingTitle) {
        if (lessonCache.has(trainingUrl)) {
            return Promise.resolve(lessonCache.get(trainingUrl));
        }

        return new Promise((resolve, reject) => {
            $.ajax({
                url: trainingUrl,
                method: 'GET',
                success: function(data) {
                    const lessons = [];
                    const lessonElements = $(data).find('.lesson-list li');

                    lessonElements.each(function() {
                        const titleElement = $(this).find('.link.title');
                        let title = titleElement?.text()?.trim() || '';
                        // Удаляем текст "просмотрено" и содержимое тега <span>
                        title = title.replace(/просмотрено/i, '').trim();
                        const span = titleElement?.find('.lesson-list__video-watched');
                        if (span) {
                            title = titleElement.clone().children('.lesson-list__video-watched').remove().end().text().trim();
                        }
                        const description = $(this).find('.description')?.text()?.trim() || '';
                        const url = $(this).find('a.item-a')?.attr('href') || '';

                        lessons.push({
                            trainingTitle: trainingTitle,
                            title: title,
                            description: description,
                            url: url,
                            text: (title + ' ' + description).toLowerCase()
                        });
                    });

                    lessonCache.set(trainingUrl, lessons);
                    resolve(lessons);
                },
                error: function(xhr, status, error) {
                    console.warn(`Ошибка загрузки уроков для ${trainingUrl}: ${error}`);
                    resolve([]); // Возвращаем пустой массив в случае ошибки
                }
            });
        });
    }

    // Функция поиска с поддержкой асинхронности
    async function searchLessons() {
        const searchTerm = searchInput.value.toLowerCase().trim();

        // Показываем/скрываем кнопку очистки
        clearButton.style.display = searchTerm ? 'block' : 'none';

        // Если поисковый запрос пустой
        if (searchTerm === '') {
            searchResults.innerHTML = '<div class="no-results">Введите запрос для поиска</div>';
            searchStatus.textContent = '';
            searchResultsContainer.style.display = 'none';
            return;
        }

        // Показываем индикатор загрузки
        searchStatus.innerHTML = '<span class="search-loader"></span> Поиск...';
        searchResultsContainer.style.display = 'block';
        isSearching = true;

        // Если данные о тренингах ещё не собраны
        if (allTrainings.length === 0) {
            await collectTrainingData();
        }

        // Собираем все уроки: с текущей страницы и из тренингов
        const allLessons = [];

        // Уроки с текущей страницы
        const localLessons = collectLocalLessons();
        allLessons.push(...localLessons);

        // Уроки из тренингов
        for (const training of allTrainings) {
            if (training.url) {
                const lessons = await fetchLessons(training.url, training.title);
                allLessons.push(...lessons);
            }
        }

        // Фильтруем уроки
        const filteredLessons = allLessons.filter(lesson => {
            return lesson.text.includes(searchTerm);
        });

        // Очищаем результаты
        searchResults.innerHTML = '';

        // Отображаем результаты
        if (filteredLessons.length > 0) {
            filteredLessons.forEach(lesson => {
                const resultItem = document.createElement('div');
                resultItem.className = 'lesson-item';

                // Создаём содержимое элемента результата
                const trainingTitleElement = document.createElement('h4');
                trainingTitleElement.textContent = lesson.trainingTitle;

                const titleElement = document.createElement('h3');
                titleElement.textContent = lesson.title;

                const descElement = document.createElement('p');
                descElement.textContent = lesson.description;

                // Добавляем ссылку, если она есть
                if (lesson.url) {
                    const linkElement = document.createElement('a');
                    linkElement.href = lesson.url;
                    linkElement.className = 'lesson-link';
                    linkElement.textContent = 'Перейти к уроку';
                    resultItem.appendChild(linkElement);
                }

                // Собираем элемент результата
                resultItem.appendChild(trainingTitleElement);
                resultItem.appendChild(titleElement);
                resultItem.appendChild(descElement);

                // Подсвечиваем найденный текст
                highlightText(resultItem, searchTerm);

                // Добавляем в результаты
                searchResults.appendChild(resultItem);
            });

            searchStatus.textContent = `Найдено: ${filteredLessons.length} уроков`;
            searchResultsContainer.style.display = 'block';
        } else {
            searchResults.innerHTML = '<div class="no-results">По вашему запросу ничего не найдено</div>';
            searchStatus.textContent = 'Нет результатов';
            searchResultsContainer.style.display = 'block';
        }

        isSearching = false;
    }

    // Функция для подсветки найденного текста
    function highlightText(element, searchTerm) {
        const nodes = [...element.childNodes];

        for (const node of nodes) {
            if (node.nodeType === 3) { // Текстовый узел
                const text = node.textContent;
                const lowerText = text.toLowerCase();
                const index = lowerText.indexOf(searchTerm);

                if (index >= 0) {
                    const before = text.substring(0, index);
                    const match = text.substring(index, index + searchTerm.length);
                    const after = text.substring(index + searchTerm.length);

                    const span = document.createElement('span');
                    span.className = 'highlight';
                    span.textContent = match;

                    const fragment = document.createDocumentFragment();
                    fragment.appendChild(document.createTextNode(before));
                    fragment.appendChild(span);
                    fragment.appendChild(document.createTextNode(after));

                    node.parentNode.replaceChild(fragment, node);
                }
            } else if (node.nodeType === 1) { // Элемент
                highlightText(node, searchTerm);
            }
        }
    }

    // Функция для очистки поиска
    function clearSearch() {
        searchInput.value = '';
        searchResults.innerHTML = '<div class="no-results">Введите запрос для поиска</div>';
        clearButton.style.display = 'none';
        searchStatus.textContent = '';
        searchResultsContainer.style.display = 'none';
        searchInput.focus();
    }

    // Обработчик для асинхронного поиска при вводе текста
    function handleSearchInput() {
        clearTimeout(searchTimeout);
        searchTimeout = setTimeout(() => {
            searchLessons();
        }, DEBOUNCE_DELAY);
        clearButton.style.display = searchInput.value ? 'block' : 'none';
    }

    // Обработчик клика для скрытия контейнера результатов
    document.addEventListener('click', function(event) {
        const target = event.target;
        // Проверяем, что клик не внутри контейнера результатов,
        // не по ссылке урока и не внутри блока search-container
        if (
            !searchResultsContainer.contains(target) &&
            !target.closest('.lesson-link') &&
            !target.closest('.search-container')
        ) {
            searchResultsContainer.style.display = 'none';
        }
    });

    // Предотвращаем скрытие при клике внутри контейнера
    searchResultsContainer.addEventListener('click', function(event) {
        event.stopPropagation();
    });

    // Обработчики событий
    if (searchButton) {
        searchButton.addEventListener('click', () => {
            clearTimeout(searchTimeout);
            searchLessons();
        });
    }

    searchInput.addEventListener('input', handleSearchInput);

    searchInput.addEventListener('keypress', function(e) {
        if (e.key === 'Enter') {
            clearTimeout(searchTimeout);
            searchLessons();
        }
    });

    clearButton.addEventListener('click', clearSearch);

    // Инициализация
    searchInput.focus();
    collectTrainingData();
    searchResults.innerHTML = '<div class="no-results">Введите запрос для поиска</div>';
});